package com.yuju.hotel.service.impl;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.yuju.common.core.dao.IBaseDao;
import com.yuju.common.core.service.AbstractBaseService;
import com.yuju.hotel.dao.IPriceDetailDao;
import com.yuju.hotel.dao.entity.PriceDetail;
import com.yuju.hotel.model.PriceDetailModel;
import com.yuju.hotel.model.PriceSchemeModel;
import com.yuju.hotel.service.IPriceDetailService;
import com.yuju.hotel.service.IPriceSchemeService;
import com.yuju.util.Utils;
/**
 * 
 * 类名：PriceDetailServiceImpl  <br />
 *
 * 功能：
 *
 * @author : zhousc <br />
 * @Date : 2017年11月28日 下午2:45:11  <br />
 * @version : 1.1 <br />
 */
@Service
public class PriceDetailServiceImpl extends AbstractBaseService<PriceDetailModel, PriceDetail, String> implements IPriceDetailService{

	@Autowired
	private IPriceDetailDao priceDetailDao;
	@Autowired
	private IPriceSchemeService priceSchemeService;
	
	@Override
	public IBaseDao<PriceDetailModel, PriceDetail, String> getDao() {
		// TODO Auto-generated method stub
		return priceDetailDao;
	}
	/**
	 * 
	 * 功能: 价格方案明细保存<br/>
	 * 
	 * 重写：zhousc <br/>
	 * 
	 * @Date ：2017年11月28日 下午2:46:34<br/>
	 * 
	 * @param priceDetailModel
	 * @return <br/>
	 * @see com.yuju.common.core.service.AbstractBaseService#save(java.lang.Object)
	 */
	@Override
	public int save(PriceDetailModel priceDetailModel){
		priceDetailModel.setId(Utils.getUUID());
		priceDetailModel.setGmtCreate(new Date());
		priceDetailModel.setGmtModified(new Date());
		return this.getDao().saveSelective(priceDetailModel);
	}
	
	/**
	 * 
	 * 功能: 更新价格方案明细<br/>
	 * 
	 * 重写：zhousc <br/>
	 * 
	 * @Date ：2017年11月28日 下午2:47:13<br/>
	 * 
	 * @param priceDetailModel
	 * @return <br/>
	 * @see com.yuju.common.core.service.AbstractBaseService#updateSelective(java.lang.Object)
	 */
	@Override
	public int updateSelective(PriceDetailModel priceDetailModel){
		priceDetailModel.setGmtModified(new Date());
		return this.getDao().updateSelective(priceDetailModel);
	}
	
	/**
	 * 
	 * 功能: 删除入住标准对应的价格明细 （删除入住标准时调用）<br/>
	 * 
	 * 重写：zhousc <br/>
	 * 
	 * @Date ：2017年11月29日 下午3:55:30<br/>
	 * 
	 * @param checkinStandardId
	 * @return <br/>
	 * @see com.yuju.hotel.service.IPriceDetailService#delCheckinStandardDetail(java.lang.String)
	 */
	@Override
	public int delCheckinStandardDetail(String checkinStandardId) {
		return priceDetailDao.delCheckinStandardDetail(checkinStandardId);
	}
	/**
	 * 
	 * 功能: 删除价格方案对应的价格明细 （删除价格方案时调用）<br/>
	 * 
	 * 重写：zhousc <br/>
	 * 
	 * @Date ：2017年11月29日 下午3:55:53<br/>
	 * 
	 * @param priceSchemeId
	 * @return <br/>
	 * @see com.yuju.hotel.service.IPriceDetailService#delPriceSchemeDetail(java.lang.String)
	 */
	@Override
	public int delPriceSchemeDetail(String priceSchemeId) {
		return priceDetailDao.delPriceSchemeDetail(priceSchemeId);
	}
	
	/**
	 * 
	 * 功能:根据房型ID删除对应的价格明细(删除房型时调用) <br/>
	 * 
	 * 重写：zhousc <br/>
	 * 
	 * @Date ：2017年11月30日 上午9:47:11<br/>
	 * 
	 * @param roomTypeId
	 * @return <br/>
	 * @see com.yuju.hotel.service.IPriceDetailService#delPriceDetailByRoomTypeId(java.lang.String)
	 */
	@Override
	public int delPriceDetailByRoomTypeId(String roomTypeId) {
		return priceDetailDao.delPriceDetailByRoomTypeId(roomTypeId);
	}
	/**
	 * 
	 * 功能:添加房型后，为本分店下每条价格方案增加该房型价格明细 <br/>
	 * 
	 * 重写：zhousc <br/>
	 * 
	 * @Date ：2017年12月8日 上午9:47:18<br/>
	 * 
	 * @param priceDetailModel
	 * @return <br/>
	 * @see com.yuju.hotel.service.IPriceDetailService#saveRoomTypeAfter(com.yuju.hotel.model.PriceDetailModel)
	 */
	@Override
	public int saveRoomTypeAfter(PriceDetailModel priceDetailModel) {

		//根据分店ID查询 本分店下的所有价格方案
		PriceSchemeModel priceSchemeModel = new PriceSchemeModel();
		priceSchemeModel.setHotelId(priceDetailModel.getHotelId());
		List<PriceSchemeModel> list = priceSchemeService.list(priceSchemeModel);
		//为每条价格方案增加该房型价格明细
		for(int i = 0; i < list.size(); i++){
			priceDetailModel.setId(Utils.getUUID());
			priceDetailModel.setGmtCreate(new Date());
			priceDetailModel.setGmtModified(new Date());
			priceDetailModel.setPirceSchemeId(list.get(i).getId());
			this.getDao().save(priceDetailModel);
		}
		
		return 1;
	}
	
	/**
	 * 
	 * 功能：房型價格更新后的操作<br/>
	 *
	 * @author zhousc
	 * @Date 2017年12月18日 下午5:41:11 <br/>
	 */
	@Override
	public int updRoomTypeAfter(PriceDetailModel model) {
		//根据分店ID查询该店的门市价
		PriceSchemeModel priceSchemeModel = new PriceSchemeModel();
		priceSchemeModel.setName("门市价");
		priceSchemeModel.setHotelId(model.getHotelId());
		List<PriceSchemeModel> priceSchemeModels = priceSchemeService.list(priceSchemeModel);
		//根据门市价ID和房型ID查询价格明细
		PriceDetailModel priceDetailModel = new PriceDetailModel();
		priceDetailModel.setPirceSchemeId(priceSchemeModels.get(0).getId());
		priceDetailModel.setRoomTypeId(model.getRoomTypeId());
		List<PriceDetailModel> PriceDetailModels = this.getDao().list(getBeanMap(priceDetailModel));
		//更新此条数据
		model.setId(PriceDetailModels.get(0).getId());
		this.updateSelective(model);
		
		
		//根据分店ID查询该店的微信会员价
		PriceSchemeModel priceSchemeModel1 = new PriceSchemeModel();
		priceSchemeModel1.setName("微信会员");
		priceSchemeModel1.setHotelId(model.getHotelId());
		List<PriceSchemeModel> priceSchemeModels1 = priceSchemeService.list(priceSchemeModel1);
		if (Utils.isNotNull(priceSchemeModels1) && !priceSchemeModels1.isEmpty()) {
			//根据门市价ID和房型ID查询价格明细
			PriceDetailModel priceDetailModel1 = new PriceDetailModel();
			priceDetailModel1.setPirceSchemeId(priceSchemeModels1.get(0).getId());
			priceDetailModel1.setRoomTypeId(model.getRoomTypeId());
			List<PriceDetailModel> PriceDetailModels1 = this.getDao().list(getBeanMap(priceDetailModel1));
			//更新此条数据
			model.setId(PriceDetailModels1.get(0).getId());
			model.setPrice(null);
			this.updateSelective(model);
		}
		return 1;
	}
}
